BlenderJoy 您所在的位置:网站首页 mesh layers翻译 BlenderJoy

BlenderJoy

2023-05-14 19:02| 来源: 网络整理| 查看: 265

使用 Python 编写 Blender 脚本代码需要对 bpy 有一定的基础了解

选定 # 当前环境的正在处理的所有数据 bpy.context # 当前激活项物体,只能选择一个 bpy.context.active_object # 大纲所选中物体 bpy.context.view_layer.objects.active 复制代码

bpy.context 子模块用于根据不同的状态标准访问 Blender 的对象和区域。此子模块的主要功能是为 Python 开发人员提供一种 访问用户当前正在处理的数据的方法 。如果我们创建一个按钮来排列所有选中的对象,我们可以(在代码上)允许用户选中他(在界面上)所选择的对象,然后排列 bpy.context.select_objects 中的所有对象。

在构建插件(addons)时,我们经常使用 bpy.context.scene,因为它是某些插件所必需输入 Blender 的对象。我们也可以使用 bpy.context 来访问活动对象,在 对象模式 和 编辑模式 之间切换,并接受来自 油性铅笔 的数据。

# 全选命令 bpy.ops.object.select_all(action='SELECT') # 全不选命令 bpy.ops.object.select_all(action='DESELECT') 复制代码

bpy.ops 正如其名字所暗含的那样,这个子模块包含操作符(Operators)。这些主要是用于 操作对象 的函数,类似于 Blender 美术人员在默认界面中操作对象的方式。子模块还可以操作 3D 视口、渲染、文本等。

对于操作 3D 对象,两个最重要的类是 bpy.ops.object 和 bpy.ops.mesh。 object 类包含用于同时操作多个选定对象的函数以及许多通用实用程序。 mesh 类包含用于每次操作一个对象的顶点、边和面的函数,通常需要切换到 Edit Mode(编辑模式)下进行操作。 例如: bpy.ops.object.mode_set(mode='EDIT') # 删除重复顶点 bpy.ops.mesh.remove_doubles() # 返回对象模式 bpy.ops.object.mode_set(mode='OBJECT') 复制代码

目前 bpy.ops 子模块 中有 71 个类。

网格数据 # Mesh 变量存储物体网格数据 mesh = bpy.data.objects["mesh"] 复制代码

bpy.data 该子模块用于访问 Blender 的内部数据。关于这个特定模块的文档解释起来可能有些困难( */bpy.data.html 页面直接指向一个单独的类),但我们将在日后大量依赖它。bpy.data.objects 类包含决定 对象形状 和 位置 的所有数据。当我们说前面的子模块 bpy.context 能够很好的指向对象组时,我们指的是 bpy.context 类将生成对 bpy.data.class 的 数据块的引用 。

# 创建 box bpy.ops.mesh.primitive_cube_add() 复制代码 # 复制网格 bpy.ops.object.duplicate(linked=False,mode='TRANSLATION') 复制代码 坐标 # 当前选择物体轴心点的世界坐标 bpy.context.object.location # 拿到选中物体的世界坐标中的 Z 坐标数值,也可能用 bpy.context.object.location[2] 来表示 bpy.context.object.location.z # 选中物体的世界坐标中的 Z 坐标数值随机加一个数 bpy.context.object.location.z += random() 复制代码 对象命名 # 查看选中物体的名字 bpy.context.object.name # 直接更改选中物体的名字 bpy.context.object.name = "新字符串名字" 复制代码 修改器 示例 1: # 添加修改器 bpy.ops.object.modifier_add(type='DECIMATE') # 设置修改器参数 bpy.context.object.modifiers["Decimate"].ratio = 0.1 # 应用修改器 bpy.ops.object.modifier_apply(apply_as='DATA', modifier="Decimate") 复制代码 示例 2: # 新建修改器:子表面细分 obj = bpy.data.objects.new("Wave",mesh) ... obj.modifiers.new("subd", type='SUBSURF') obj.modifiers['subd'].levels = 3 复制代码 材质 # 返回当前选择物体的材质 bpy.context.object.active_material # 获取当前场景的某个材质 bpy.data.materials.get(材质名称字符串) # 给当前 `激活的物体` 的 `材质插槽` 赋某个材质 bpy.context.view_layer.objects.active.material_slots.data.active_material = 材质 复制代码 .blend 文件 # 存储当前文件 bpy.ops.wm.save_mainfile(filepath="D:\TestSave.blend") # 打开文件 bpy.ops.wm.open_mainfile(filepath=BlendFilePath) 复制代码 得到当前版本的 Blender 文件夹路径 import sys argv = sys.argv print(argv) 复制代码

image.png

遍历列表选中物体 import bpy for i in bpy.context.visible_objects: # 迭代所有可见物体 if i.name == "要选物体的名字": i.select_set(state=True) for i in bpy.context.visible_objects: if i.type == "MESH": # 判断物体类型是否是网格 bpy.context.view_layer.objects.active = i # 当前激活物体定义为 i # 切换编辑模式 bpy.ops.object.mode_set(mode='EDIT') # 编辑模式的(点/线/面) bpy.context.tool_settings.mesh_select_mode = (False, True, False) # 全选命令 bpy.ops.mesh.select_all(action='SELECT') # 关闭编辑模式(物体模式) bpy.ops.object.mode_set(mode='OBJECT') 复制代码

image.png

image.png

参考

Blender Python API



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有